package service

import (
	"jnjword/models"
	"strconv"

	"github.com/gin-gonic/gin"
)

// GetUserWordList 获取用户单词列表
// @Summary      用户单词列表
// @Tags         单词模块
// @Param        user_id     query     int  true  "用户id"
// @Success      200  {string}  json{"code","message","data"}
// @Router       /word/getUserWordList [get]
func GetUserWordList(c *gin.Context) {
	// 获取用户ID参数
	userIDStr := c.Query("user_id")
	userID, err := strconv.Atoi(userIDStr)
	if err != nil {
		c.JSON(200, gin.H{
			"code": -1,
			"msg":  "用户ID格式错误",
			"data": nil,
		})
		return
	}

	// 根据用户ID查询单词列表
	data := models.GetUserWordList(uint(userID))
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "success",
		"data": data,
	})
}

// CreateUserWord 创建用户单词
// @Summary      创建用户单词
// @Tags         单词模块
// @Param        user_id     query     int     true  "用户id"
// @Param        word        query     string  true  "单词"
// @Param        chinese     query     string  true  "含义"
// @Success      200  {string}  json{"code","message"}
// @Router       /word/createUserWord [post]
func CreateUserWord(c *gin.Context) {
	// 获取用户ID
	userIDStr := c.Query("user_id")
	userID, err := strconv.Atoi(userIDStr)
	if err != nil {
		c.JSON(200, gin.H{
			"code": -1,
			"msg":  "用户ID格式错误",
			"data": nil,
		})
		return
	}

	// 创建单词并关联用户
	var word models.WordBasic
	word.UserID = uint(userID) // 关键：关联用户ID
	word.Word = c.Query("word")
	word.Chinese = c.Query("chinese")
	flag := models.CheckWordDuplicate(word.UserID, word.Word) // 检查单词是否重复
	if flag {
		c.JSON(200, gin.H{
			"code": -1,
			"msg":  "单词已存在",
			"data": nil,
		})
		return
	}
	// 执行创建操作
	result := models.CreateUserWord(word)
	if result.Error != nil {
		c.JSON(200, gin.H{
			"code": -1,
			"msg":  "创建失败：" + result.Error.Error(),
			"data": nil,
		})
		return
	}

	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "单词创建成功",
		"data": word, // 返回创建的单词信息（包含ID）
	})
}

// DeleteUserWord 删除用户单词
// @Summary      删除用户单词
// @Tags         单词模块
// @Param        id     query     int  true  "用户id"
// @Param        word     query     string  true  "用户单词"
// @Success      200  {string}  json{"code","message"}
// @Router       /word/deleteUserWord [post]
func DeleteUserWord(c *gin.Context) {
	// 获取用户ID
	userIDStr := c.Query("id")
	userID, err := strconv.Atoi(userIDStr)
	if err != nil {
		c.JSON(200, gin.H{
			"code": -1,
			"msg":  "用户ID格式错误",
			"data": nil,
		})
		return
	}
	wordname := c.Query("word")
	// 执行删除操作
	models.DeleteUserWord(uint(userID), wordname)
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "单词删除成功",
		"data": nil,
	})
}

// UpdateUserWord 更新用户单词意思
// @Summary      更新用户单词
// @Tags         单词模块
// @Param        id     query     int  true  "用户id"
// @Param        word     query     string  true  "用户单词"
// @Param        chinese     query     string  true  "含义"
// @Success      200  {string}  json{"code","message"}
// @Router       /word/updateUserWord [post]
func UpdateUserWord(c *gin.Context) {
	// 获取用户ID
	userIDStr := c.Query("id")
	userID, err := strconv.Atoi(userIDStr)
	if err != nil {
		c.JSON(200, gin.H{
			"code": -1,
			"msg":  "用户ID格式错误",
			"data": nil,
		})
		return
	}
	var word_basic models.WordBasic
	word_basic.UserID = uint(userID)
	word_basic.Word = c.Query("word")
	word_basic.Chinese = c.Query("chinese")
	// 检测单词是否存在
	flag := models.CheckWordDuplicate(word_basic.UserID, word_basic.Word)
	if !flag {
		c.JSON(200, gin.H{
			"code": -1,
			"msg":  "单词不存在",
			"data": nil,
		})
		return
	}
	// 执行更新操作
	models.UpdateUserWord(uint(userID), word_basic)
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "单词更新成功",
		"data": nil,
	})
}

// UpdateUserWord 更新用户单词本身
// @Summary      更新用户单词本身
// @Tags         单词模块
// @Param        id     query     int  true  "用户id"
// @Param        word     query     string  true  "用户单词"
// @Param        chinese     query     string  true  "含义"
// @Success      200  {string}  json{"code","message"}
// @Router       /word/updateUserWordSelf [post]
func UpdateUserWordSelf(c *gin.Context) {
	// 获取用户ID
	userIDStr := c.Query("id")
	userID, err := strconv.Atoi(userIDStr)
	if err != nil {
		c.JSON(200, gin.H{
			"code": -1,
			"msg":  "用户ID格式错误",
			"data": nil,
		})
		return
	}
	var word_basic models.WordBasic
	word_basic.UserID = uint(userID)
	word_basic.Word = c.Query("word")
	word_basic.Chinese = c.Query("chinese")
	// // 检测单词是否存在
	// flag := models.CheckWordDuplicate(word_basic.UserID, word_basic.Word)
	// if !flag {
	// 	c.JSON(200, gin.H{
	// 		"code": -1,
	// 		"msg":  "单词不存在",
	// 		"data": nil,
	// 	})
	// 	return
	// }
	// 执行更新操作
	models.UpdateUserWord(uint(userID), word_basic)
	c.JSON(200, gin.H{
		"code": 0,
		"msg":  "单词更新成功",
		"data": nil,
	})
}
